package com.example.foodwebbackend.mapper;

import com.example.foodwebbackend.dto.PageRequest;
import com.example.foodwebbackend.entity.Merchant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface MerchantMapper {
    
    /**
     * 根据用户名查找商家
     */
    Merchant findByUsername(@Param("username") String username);
    
    /**
     * 根据商家ID查找商家
     */
    Merchant findById(@Param("merchantId") Integer merchantId);
    
    /**
     * 插入新商家
     */
    int insert(Merchant merchant);
    
    /**
     * 更新商家信息
     */
    int update(Merchant merchant);
    
    /**
     * 删除商家
     */
    int deleteById(@Param("merchantId") Integer merchantId);
    
    /**
     * 查找所有商家
     */
    List<Merchant> findAll();
    
    /**
     * 根据审核状态查找商家
     */
    List<Merchant> findByApprovalStatus(@Param("isApproved") Integer isApproved);
    
    /**
     * 更新最后登录时间
     */
    int updateLastLoginTime(@Param("merchantId") Integer merchantId);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(@Param("username") String username);
    
    /**
     * 更新审核状态
     */
    int updateApprovalStatus(@Param("merchantId") Integer merchantId, @Param("isApproved") Integer isApproved);
    
    /**
     * 统计商家总数
     */
    int countMerchants();
    
    /**
     * 根据评分排序查找商家
     */
    List<Merchant> findByRatingDesc(@Param("limit") Integer limit);
    
    /**
     * 搜索商家
     */
    List<Merchant> searchMerchants(@Param("keyword") String keyword);

    /**
     * 分页查询商家
     */
    List<Merchant> findMerchantsWithPagination(@Param("pageRequest") PageRequest pageRequest);

    /**
     * 统计搜索条件下的商家数量
     */
    long countMerchantsWithSearch(@Param("search") String search, @Param("approvalStatus") Integer approvalStatus);

    /**
     * 批量删除商家
     */
    int batchDeleteByIds(@Param("merchantIds") List<Integer> merchantIds);

    /**
     * 批量更新审核状态
     */
    int batchUpdateApprovalStatus(@Param("merchantIds") List<Integer> merchantIds, @Param("isApproved") Integer isApproved);
} 